home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 80 / CD Actual 80 Julio-Agosto 2003.iso / Linux / LinuxGazette / lg / issue26 / XeoMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-08-14  |  6.7 KB  |  281 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.Point;
  10. import java.awt.Rectangle;
  11. import java.net.URL;
  12. import java.util.StringTokenizer;
  13.  
  14. public class XeoMenu extends Applet {
  15.    Image image;
  16.    Image bbuf;
  17.    Graphics bbufG;
  18.    boolean imageDone;
  19.    Rectangle[] hitArea;
  20.    Rectangle[] srcRect;
  21.    Point[] dstPt;
  22.    boolean[] down;
  23.    String[] url;
  24.    String[][] itemUrl;
  25.    String[][] item;
  26.    int curMenu;
  27.    int curMenuItem;
  28.    Rectangle[] menuItemRect;
  29.    Color bgColor;
  30.    Color[] fgMenuColor = new Color[2];
  31.    Color[] bgMenuColor = new Color[2];
  32.    int marginH;
  33.    int marginV;
  34.    // $FF: renamed from: f java.awt.Font
  35.    Font field_0;
  36.    // $FF: renamed from: fm java.awt.FontMetrics
  37.    FontMetrics field_1;
  38.  
  39.    public void init() {
  40.       this.image = ((Applet)this).getImage(((Applet)this).getCodeBase(), ((Applet)this).getParameter("image"));
  41.       this.marginH = Integer.parseInt(((Applet)this).getParameter("marginh"));
  42.       this.marginV = Integer.parseInt(((Applet)this).getParameter("marginv"));
  43.       int[] var1 = this.parseInt(((Applet)this).getParameter("bg-color"), " ");
  44.       this.bgColor = new Color(var1[0], var1[1], var1[2]);
  45.       var1 = this.parseInt(((Applet)this).getParameter("fg-menu-color"), " ");
  46.       this.fgMenuColor[0] = new Color(var1[0], var1[1], var1[2]);
  47.       var1 = this.parseInt(((Applet)this).getParameter("fg-hi-menu-color"), " ");
  48.       this.fgMenuColor[1] = new Color(var1[0], var1[1], var1[2]);
  49.       var1 = this.parseInt(((Applet)this).getParameter("bg-menu-color"), " ");
  50.       this.bgMenuColor[0] = new Color(var1[0], var1[1], var1[2]);
  51.       var1 = this.parseInt(((Applet)this).getParameter("bg-hi-menu-color"), " ");
  52.       this.bgMenuColor[1] = new Color(var1[0], var1[1], var1[2]);
  53.       this.bbuf = ((Component)this).createImage(((Component)this).size().width, ((Component)this).size().height);
  54.       this.bbufG = this.bbuf.getGraphics();
  55.       int var2 = Integer.parseInt(((Applet)this).getParameter("font-height"));
  56.  
  57.       for(int var3 = var2; var3 > 10; --var3) {
  58.          this.field_0 = new Font(((Applet)this).getParameter("font"), 0, var3);
  59.          this.field_1 = ((Component)this).getFontMetrics(this.field_0);
  60.          if (this.field_1.getHeight() <= var2) {
  61.             break;
  62.          }
  63.       }
  64.  
  65.       int var13;
  66.       for(var13 = 0; ((Applet)this).getParameter("menu" + var13) != null; ++var13) {
  67.       }
  68.  
  69.       this.hitArea = new Rectangle[var13];
  70.       this.srcRect = new Rectangle[var13];
  71.       this.dstPt = new Point[var13];
  72.       this.url = new String[var13];
  73.       this.down = new boolean[var13];
  74.       this.itemUrl = new String[var13][];
  75.       this.item = new String[var13][];
  76.  
  77.       for(int var14 = 0; var14 < this.hitArea.length; ++var14) {
  78.          String[] var4 = this.parse(((Applet)this).getParameter("menu" + var14), ((Applet)this).getParameter("separator"));
  79.          var1 = this.parseInt(var4[0], " ");
  80.          this.hitArea[var14] = new Rectangle(var1[0], var1[1], var1[2], var1[3]);
  81.          var1 = this.parseInt(var4[1], " ");
  82.          this.srcRect[var14] = new Rectangle(var1[0], var1[1], var1[2], var1[3]);
  83.          var1 = this.parseInt(var4[2], " ");
  84.          this.dstPt[var14] = new Point(var1[0], var1[1]);
  85.          this.down[var14] = var4[3].equals("d");
  86.          this.url[var14] = var4[4];
  87.          this.item[var14] = new String[(var4.length - 5) / 2];
  88.          this.itemUrl[var14] = new String[(var4.length - 5) / 2];
  89.  
  90.          for(int var5 = 0; var5 < this.item[var14].length; ++var5) {
  91.             this.item[var14][var5] = var4[var5 * 2 + 5];
  92.             this.itemUrl[var14][var5] = var4[var5 * 2 + 6];
  93.          }
  94.       }
  95.  
  96.    }
  97.  
  98.    String[] parse(String var1, String var2) {
  99.       StringTokenizer var3 = new StringTokenizer(var1, var2);
  100.       String[] var4 = new String[var3.countTokens()];
  101.  
  102.       for(int var5 = 0; var5 < var4.length; ++var5) {
  103.          var4[var5] = var3.nextToken();
  104.       }
  105.  
  106.       return var4;
  107.    }
  108.  
  109.    int[] parseInt(String var1, String var2) {
  110.       StringTokenizer var3 = new StringTokenizer(var1, var2);
  111.       int[] var4 = new int[var3.countTokens()];
  112.  
  113.       for(int var5 = 0; var5 < var4.length; ++var5) {
  114.          var4[var5] = Integer.parseInt(var3.nextToken());
  115.       }
  116.  
  117.       return var4;
  118.    }
  119.  
  120.    public void paint(Graphics var1) {
  121.       this.imageDone = false;
  122.       this.update(var1);
  123.    }
  124.  
  125.    public void update(Graphics var1) {
  126.       if (!this.imageDone) {
  127.          this.imageDone = var1.drawImage(this.image, 0, 0, this);
  128.       } else {
  129.          this.bbufG.setColor(this.bgColor);
  130.          this.bbufG.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  131.          this.bbufG.drawImage(this.image, 0, 0, this);
  132.          if (this.curMenu >= 0) {
  133.             Graphics var2 = this.bbuf.getGraphics();
  134.             var2.clipRect(this.dstPt[this.curMenu].x, this.dstPt[this.curMenu].y, this.srcRect[this.curMenu].width, this.srcRect[this.curMenu].height);
  135.             var2.drawImage(this.image, this.dstPt[this.curMenu].x - this.srcRect[this.curMenu].x, this.dstPt[this.curMenu].y - this.srcRect[this.curMenu].y, this);
  136.             var2.dispose();
  137.             var2 = this.bbuf.getGraphics();
  138.  
  139.             for(int var3 = 0; var3 < this.menuItemRect.length; ++var3) {
  140.                this.drawMenuItem(var2, var3);
  141.             }
  142.  
  143.             var2.dispose();
  144.          }
  145.  
  146.          var1.drawImage(this.bbuf, 0, 0, this);
  147.       }
  148.    }
  149.  
  150.    void drawMenuItem(Graphics var1, int var2) {
  151.       String[] var4 = this.parse(this.item[this.curMenu][var2], ((Applet)this).getParameter("newline"));
  152.       byte var5 = 0;
  153.       if (var2 == this.curMenuItem) {
  154.          var5 = 1;
  155.          ((Applet)this).getAppletContext().showStatus(this.itemUrl[this.curMenu][var2]);
  156.       }
  157.  
  158.       var1.setColor(this.bgMenuColor[var5]);
  159.       var1.fillRect(this.menuItemRect[var2].x, this.menuItemRect[var2].y, this.menuItemRect[var2].width, this.menuItemRect[var2].height);
  160.       var1.setColor(this.fgMenuColor[var5]);
  161.       var1.drawRect(this.menuItemRect[var2].x, this.menuItemRect[var2].y, this.menuItemRect[var2].width, this.menuItemRect[var2].height);
  162.       var1.setFont(this.field_0);
  163.       int var3 = this.menuItemRect[var2].y + this.marginV;
  164.  
  165.       for(int var6 = 0; var6 < var4.length; ++var6) {
  166.          var1.drawString(var4[var6], this.menuItemRect[var6].x + this.menuItemRect[var6].width - this.field_1.stringWidth(var4[var6]) - this.marginH, var3 + this.field_1.getAscent());
  167.          var3 += this.field_1.getHeight();
  168.       }
  169.  
  170.    }
  171.  
  172.    public boolean mouseExit(Event var1, int var2, int var3) {
  173.       this.curMenuItem = this.curMenu = -1;
  174.       ((Component)this).repaint();
  175.       return true;
  176.    }
  177.  
  178.    public boolean mouseEnter(Event var1, int var2, int var3) {
  179.       return this.mouseMove(var1, var2, var3);
  180.    }
  181.  
  182.    public boolean mouseDown(Event var1, int var2, int var3) {
  183.       try {
  184.          String var4 = null;
  185.          if (this.curMenuItem >= 0 && this.itemUrl[this.curMenu].length > 0) {
  186.             var4 = this.itemUrl[this.curMenu][this.curMenuItem];
  187.          } else if (this.curMenu >= 0) {
  188.             var4 = this.url[this.curMenu];
  189.          }
  190.  
  191.          if (var4 != null) {
  192.             URL var5 = new URL(((Applet)this).getDocumentBase(), var4);
  193.             if (((Applet)this).getParameter("target") != null) {
  194.                ((Applet)this).getAppletContext().showDocument(var5, ((Applet)this).getParameter("target"));
  195.             } else {
  196.                ((Applet)this).getAppletContext().showDocument(var5);
  197.             }
  198.          }
  199.       } catch (Exception var6) {
  200.          ((Throwable)var6).printStackTrace();
  201.       }
  202.  
  203.       return true;
  204.    }
  205.  
  206.    public boolean mouseMove(Event var1, int var2, int var3) {
  207.       if (this.curMenu >= 0) {
  208.          int var4 = this.inMenu(this.menuItemRect, var2, var3);
  209.          if (this.curMenuItem != var4) {
  210.             this.curMenuItem = var4;
  211.             ((Component)this).repaint();
  212.          }
  213.  
  214.          if (var4 >= 0) {
  215.             return true;
  216.          }
  217.  
  218.          this.curMenu = -1;
  219.       }
  220.  
  221.       int var13 = this.inMenu(this.hitArea, var2, var3);
  222.       if (var13 != this.curMenu) {
  223.          this.curMenu = var13;
  224.          if (var13 >= 0) {
  225.             int var5 = 50;
  226.             int var6 = 0;
  227.             this.menuItemRect = new Rectangle[this.item[this.curMenu].length];
  228.  
  229.             for(int var7 = 0; var7 < this.menuItemRect.length; ++var7) {
  230.                String[] var8 = this.parse(this.item[this.curMenu][var7], "^");
  231.  
  232.                for(int var9 = 0; var9 < var8.length; ++var9) {
  233.                   int var10 = this.field_1.stringWidth(var8[var9]);
  234.                   if (var10 > var5) {
  235.                      var5 = var10;
  236.                   }
  237.                }
  238.  
  239.                this.menuItemRect[var7] = new Rectangle();
  240.                this.menuItemRect[var7].height = this.parse(this.item[this.curMenu][var7], "^").length * this.field_1.getHeight() + 2 * this.marginV;
  241.                var6 += this.menuItemRect[var7].height;
  242.             }
  243.  
  244.             var5 += 2 * this.marginH + 1;
  245.             if (this.down[var13]) {
  246.                var3 = Math.max(0, Math.min(((Component)this).size().height - var6 - 1, this.dstPt[this.curMenu].y + this.srcRect[this.curMenu].height - 1));
  247.             } else {
  248.                var3 = Math.max(0, Math.min(((Component)this).size().height - var6 - 1, this.dstPt[this.curMenu].y - var6));
  249.             }
  250.  
  251.             var2 = this.dstPt[this.curMenu].x + this.srcRect[this.curMenu].width - var5 - 1;
  252.  
  253.             for(int var15 = 0; var15 < this.item[this.curMenu].length; ++var15) {
  254.                this.menuItemRect[var15].x = var2;
  255.                this.menuItemRect[var15].y = var3;
  256.                this.menuItemRect[var15].width = var5;
  257.                var3 += this.menuItemRect[var15].height;
  258.             }
  259.  
  260.             ((Applet)this).getAppletContext().showStatus(this.url[this.curMenu]);
  261.          }
  262.  
  263.          ((Component)this).repaint();
  264.       }
  265.  
  266.       return true;
  267.    }
  268.  
  269.    int inMenu(Rectangle[] var1, int var2, int var3) {
  270.       if (var1 != null) {
  271.          for(int var4 = 0; var4 < var1.length; ++var4) {
  272.             if (var1[var4].inside(var2, var3)) {
  273.                return var4;
  274.             }
  275.          }
  276.       }
  277.  
  278.       return -1;
  279.    }
  280. }
  281.